<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
    <style>
      .box {
        width: 100px;
        height: 100px;
        background: red;
      }
    </style>
  </head>

  <body>
    <div class="box"></div>
    <script>
      // 事件绑定、事件监听；
      var boxEle = document.querySelector(".box");

      // 绑定方式一：相同的事件 会被后面的覆盖掉；
      // boxEle.onclick = function () {
      //     console.log("点击了111");
      // }

      // boxEle.onclick = function () {
      //     console.log("点击了222");
      // }

      /* 
            var boxEle = {
                onclick:function(){

                }
            }
            boxEle.onclick = function(){
                console.log("点击了");
            }
        */

      // 绑定事件方式二；事件源.addEventListener(事件类型,事件函数) ,添加事件监听，绑定事件
      // 源于 设计模式里的 观察者模式；
      //1.绑定事件可以绑定多个 ，不会覆盖 ；一对多的关系；
      // 2.先注册 先执行(先写上去先编译的 先执行)
      // boxEle.addEventListener("click",function(){  //绑定事件函数 ，注册事件函数
      //     console.log("点击了111");
      // });
      // boxEle.addEventListener("click",function(){
      //     console.log("点击了2222");
      // });

      // boxEle.addEventListener("click",function(){
      //     console.log("点击了3333");
      // });

      // addEventListener存在兼容问题；如果是ie8或者以下 需要用attachEvent来绑定事件；
      // 注意 ：attachEvent 先注册的后执行；
      // boxEle.attachEvent("onclick",function(){
      //     console.log("点击了1111");
      // })
      // boxEle.attachEvent("onclick",function(){
      //     console.log("点击了2222");
      // })
      // boxEle.attachEvent("onclick",function(){
      //     console.log("点击了3333");
      // })
      //     console.log(window.addEventListener)

      // 兼容性的函数；
      function bindEvent(ele, eventName, fn) {
        // 判断浏览器是否支持 addEventListener方法
        if (window.addEventListener) {
          // 有addEventListener 是chrome浏览器
          ele.addEventListener(eventName, fn);
          console.log("addEventListener了");
        } else {
          // ie8或者以下；
          ele.attachEvent("on" + eventName, fn);
          console.log("attachEvent了");
        }
      }
      bindEvent(boxEle, "mousedown", function () {
        console.log("鼠标按下了");
      });

      // 总结： 1.和赋值式绑定事件的区别 赋值式只能绑定一个事件
      // 2. 事件监听可以绑定多个 兼容性 addEventListener 和 attachEvnet  ：执行顺序 可以绑定多个事件
    </script>
  </body>
</html>
